/**
 * 
 */
package vwg.na.vwm.rh.modulo.pad.util;

import java.io.IOException;
import java.io.Serializable;


import vwg.na.vwm.rh.motorsdk.modelo.procesos.entidadesgrales.PadPPTipoMovimiento;

/**
 * @author Joel Ochoa [joel.ochoa@vw.com.mx]
 *
 */
public class MovimientoPlaneacion extends
		MovimientoPlaneacionPersonalAbstract 
		implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 4101358575581359763L;
	
	private int folio;
	private PadPPTipoMovimiento tipoMovimiento;
	private int movimiento;
	private int mes;
	private int incremento;
	private int maximoIncremento;
	
	private boolean enableIncremento;
	
	private MontosPlaneacion forecast;
	
	public MovimientoPlaneacion(){
		this.forecast = new MontosPlaneacion();
		this.movimiento = 0;
		this.mes = 1;
		this.enableIncremento = true;
	}
	
	
	/**
	 * @return the folio
	 */
	public int getFolio() {
		return folio;
	}

	/**
	 * @param folio the folio to set
	 */
	public void setFolio(int folio) {
		this.folio = folio;
	}


	public PadPPTipoMovimiento getTipoMovimiento() {
		return tipoMovimiento;
	}

	public void setTipoMovimiento(PadPPTipoMovimiento tipoMovimiento) {
		this.tipoMovimiento = tipoMovimiento;
	}

	public int getMovimiento() {
		return movimiento;
	}

	public void setMovimiento(int movimiento) {
		this.movimiento = movimiento;
	}

	public int getMes() {
		return mes;
	}

	public void setMes(int mes) {
		this.mes = mes;
	}

	public int getIncremento() {
		return incremento;
	}

	public void setIncremento(int incremento) {
		this.incremento = incremento;
	}
	
	/**
	 * @return the enableIncremento
	 */
	public boolean isEnableIncremento() {
		return enableIncremento;
	}
	
	/**
	 * @param enableIncremento the enableIncremento to set
	 */
	public void setEnableIncremento(boolean enableIncremento) {
		this.enableIncremento = enableIncremento;
	}

	/**
	 * @return the forecast
	 */
	public MontosPlaneacion getForecast() {
		return forecast;
	}
	
	
	/* la sobreescritura de equals y de hashCode no estan implementados como se recomienda
	   pero se implementaron asi porque la aplicacion establece que un movimiento 
	   debe ser unico tomando en cuenta el NC */
	
	/**
	 * @return the maximoIncremento
	 */
	public int getMaximoIncremento() {
		return maximoIncremento;
	}


	/**
	 * @param maximoIncremento the maximoIncremento to set
	 */
	public void setMaximoIncremento(int maximoIncremento) {
		this.maximoIncremento = maximoIncremento;
	}

	@Override
	public boolean equals(Object o){
		if(o == null){
			return false;
		}
		if(!(o instanceof MovimientoPlaneacion)){
			return false;
		}
		
		if(((MovimientoPlaneacion)o).getPersona() == null){
			return false;
		}
		
		if(numeroControl != (( MovimientoPlaneacion)o).getNumeroControl()){
			return false;
		}
		
		return true;
	}
	
	@Override
	public int hashCode(){
		return numeroControl;
	}
	
	// writeObject/readObject se usan para que la super clase no tenga que ser Serializable
	private void writeObject(java.io.ObjectOutputStream out)
		     throws IOException{
		out.defaultWriteObject();
	}
	
	private void readObject(java.io.ObjectInputStream in)
		     throws IOException, ClassNotFoundException{
		in.defaultReadObject();
	}

}
